/*
 * Copyright 2017 Baiyyy
 * @(#)LoginInstruction.java
 */

package com.byyy.ccts.modules.cc.handle.istr.v23;


import com.byyy.ccts.modules.cc.Global;
import com.byyy.ccts.core.utils.InstructionUtils;
import com.byyy.ccts.modules.cc.entity.istr.InstructionMdl;
import com.byyy.ccts.modules.cc.entity.istr.v23.DLoginMdl;
import com.byyy.ccts.modules.cc.handle.istr.IHandler;
import org.springframework.stereotype.Service;

/**
 * 178D协议V2.3 登录指令处理类
 * Created by DELL on 2018-4-26.
 */
@Service("dLoginIstrHdl")
public class DLoginIstrHdl extends IHandler {

    /**
     * 登录指令处理
     * 1.校验(已提出共通)
     * 2.解析登录指令
     * 3.应答(已提出共通)
     * @param instructions
     */
    @Override
    public byte[] handle(byte[] instructions) {
        logger.debug("设备登录V2.3 开始执行");
        // 解析登录指令
        InstructionMdl istrMdl = this.generateInstructionModel(instructions);
        DLoginMdl login = new DLoginMdl();
        login.setDeviceId(istrMdl.getDeviceId());
        login.setSequenceNum(istrMdl.getSequenceNum());

        byte[] version = new byte[3];
        // 版本号
        for (int i = 0; i < 3; i++) {
            version[i] = instructions[15 + i];
        }
        login.setVersion(version);

        // 扩展信息ID
        login.setExtInfoId(instructions[18]);
        // 扩展信息长度
        login.setExtInfoLenth(instructions[19]);

        // 扩展信息
        byte[] extInfo = new byte[20];
        for (int i = 0; i < 20; i++) {
            extInfo[i] = instructions[20 + i];
        }
        try {
            login.setExtInfo(new String(extInfo, "GBK"));
        }
        catch(Exception e) {
            logger.error(e.getMessage(), e);
        }

        logger.debug("设备登录V2.3 执行结束");
        // 生成应答信息，返回
        return InstructionUtils.generateCommResponse(login, Global.ISTR_LOGIN);
    }

}
